FORTRAN−MZB ――――――――――――――――――――――――――――――――――――――― MZ−80B活用研究 掲載 MZ−80B マシン語 01300H−04CFFH コールド・スタート 01300H ホット・スタート  0132AH 1 FFTの例題プログラム FORTRAN−MZBテキスト 2 リサージュ図形     FORTRAN−MZBテキスト 起動方法 モニタからL ――――――――――――――――――――――――――――――――――――――― I/O’81年1月号のFORTRAN−MZをMZ−8OBに移植しました。 グラフィック関係を少々強化しただけで、ほかはMZ−8OK/C版と同じです。 ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇        コンパイラ ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇ コンパイラ・モードで受け付けられるコマンドは11種類あります。 (1)EDIT    このコマンドは内蔵されているエディタにジャンプします。    エディタの説明は後にします。   ・――――――――――――――――――――・   | EDIT [CR]           |   ・――――――――――――――――――――・ (2)COMPIL    テキスト・ファイルがメモリ上にある場合に、    そのテキストを読みながらコンパイルします。    コンパイラによって展開されたオブジェクトは    テキスト・エンドから作られていきます。   ・――――――――――――――――――――・   | COMPIL[CR]          |   ・――――――――――――――――――――・     テキストがない場合、またはEND行がない場合には、   ・――――――――――――――――――――・   | FILE ERROR ABORT!  |   ・――――――――――――――――――――・    がでます。 (3)EXEC    カセットにテキストが落ちている場合にこれを読みながら    コンパイルすることができます。   ・――――――――――――――――――――・   | EXEC〔FILE NAME〕[CR] |   | ↓PLAY              |   |  ̄                  |   ・――――――――――――――――――――・    このコマンドを実行すると、コンパイラはカセットから    1ブロックごと読み込んで、そのつどコンパイルしていきます。    オンメモリで、コンパイルしたときに    メモリエラーが出るような場合には、    いったんカセットにテキストを落として    EXECで実行してください。 (4)BSAVE    COMPILまたはEXECで作ったオブジェクトを外部へ    出力するときにこれを使います。   ・――――――――――――――――――――・   | BSAVE〔FILENAME〕[CR] |   ・――――――――――――――――――――・ (5)LIST指定    COMPIL、EXECによりコンパイルすると、    コンパイラはコンパイルした行を表示します。    LIST指定によって全リストを表示したり、しなかったり、    またエラーのあった行のみ表示することができます。    ●LISTN     コンパイル・リストは表示せず、     エラーの合計とメモリ・サイズを表示します。     初期状態ではこのモードです。    ●LISTE     エラーのなる行のみ出力して、     エラー合計、メモリ、サイズを表示します。    ●LIST     すべてのコンパイル・リストを出力します。    ●LISTP     出力デバイスをプリンタに切り換えます。     LISTPはプリンタ・モードのLISTで、     これの後にLISTN,LISTEを実行すると、     プリンタ・モードのそれになります。     電源が入っていない場合、UNDEFINEDを返してきます。    ●LISTC     この指定によってプリンタ・モードを解除します。 (6)RUN    コンパイル・オブジェクトをFORTRANから    直接実行する場合にRUNを使います。    RUNはオブジェクトを単に実行するだけで、    その他の処理は行ないません。    ただ、STOP文、BREAK文によって、    オブジェクトが停止した場合のみコンパイラに戻るよう    スーパーバイズしています。 (7)BYE    モニタヘジャンプします。   ・――――――――――――――――――――・   | コールド・スタート  1300H   |   |  ホット・スタート  132AH   |   ・――――――――――――――――――――・ ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇         エディタ ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇ エディタは、カーソル・エディットができる簡単なエディタです。 画面上にリストが残っていれば、いつでも修正可能です。 メモリ内イメージは、シャープのTEXTエディタと同じく、 CRで区切られた文字列です。 カセットの記録フォーマットも同じなので、 シャープのテキスト・エディタでソースを作って、 コンパイルしてもかまいません。 コンパイラからエディタヘジャンプします。   ・――――――――――――――――――――・   | EDIT[CR]            |   | #■                 |   ・――――――――――――――――――――・ これによりエディタ・モードを示すために#を出力して、 入力待ちになります。 エディタ・コマンドは以下の8個です。  &…NEW    D…DELETE  I…INSERT !…COMPILER  B…BREAK  R…READ FILE  L…LIST   W…WRITE FILE (1)Insert    Iコマンドは、テキストをインサードするときに使います。    このコマンドは常にテキスト・エンドへインサートします。    [SHIFT]+[BREAK]を押すことによって、    コマンド・レベルヘ戻ります。   ・――――――――――――――――――――・   | #I[CR]              |   | ■                  |   ・――――――――――――――――――――・ (2)Break    Bコマンドは、行間に1行インサートしたいときに使います。   ・――――――――――――――――――――・   | Bn■                |   ・――――――――――――――――――――・    nで指定した番号の行は1行下にさがり、その上にインサートされます。   ・――――――――――――――――――――・   | #Bn     [CR]        |   | Strings [CR]        |   | #■                 |   ・――――――――――――――――――――・    nは、LISTしたときにエディタが付ける番号です。 (3)List.    Lコマンドはインサートしたテキストをリストします。    次の3つの型があります。   ・――――――――――――――――――――・   | #L[CR]              |   | #L,n[CR]            |   | #L,P[CR]            |   ・――――――――――――――――――――・    ●L     テキストの先頭からCRTに表示します。     [SHIFT]+[BREAK]によって途中で止めることが可能です。    ●L,n     nはLISTしたときに、エディタが付ける番号で、     n番以降のリストを行ないます。     LISTを止めるのはLと同じです.    ●L,P     プリンタにLISTを出力します。     ただし、n番以降のLIST出力はできません。     止める場合はLと同じです。    LISTの画面は次のようになっています。   ・――――――――――――――――――――・   | #L[CR]              |   |   0:Strings        |   |   1:Strings        |   |   2:Strings        |   |      |             |   | #■                 |   ・――――――――――――――――――――・    左側の番号がエディタの付けた番号で、Stringsは    インサートしたテキストです。    番号とテキストの間に『:』が入いっています。 (4)Delete    Dコマンドは、1行デリートします。   ・――――――――――――――――――――・   | #Dn[CR]             |   ・――――――――――――――――――――・     nで指定したテキストが抹消されます。     nはエディタの付けた番号です。 (5)Compile    !コマンドはエディタ・モードを抜け、コンパイラ・モードヘ    移る場合に使います。   ・――――――――――――――――――――・   | #![CR]              |   | OK.                |   | ■                  |   ・――――――――――――――――――――・ (6)New    &コマンドはテキスト・エリアをクリアし、初期化します。   ・――――――――――――――――――――・   | #&[CR]              |   | #■                 |   ・――――――――――――――――――――・ (7)Read、Write    R、Wコマンドはカセットに対しての入出力用です。    これによってテキスト・レベルでプログラムの保存ができます。    ●R     テキストを読み込みます。   ・――――――――――――――――――――・   | #R〔FILE NAME〕[CR]   |   ・――――――――――――――――――――・     ファイル名は省略可能です。    ●W     メモリにあるテキストをカセットに落します。   ・――――――――――――――――――――・   | #W〔FILE NAME〕[CR]   |   ・――――――――――――――――――――・     ファイル名は省略可能です。 (8)カーソル移動キー    画面にリストが残っていれば、    BASICと同じようにカーソルを動かして修正が可能です。    ただし、Iコマンド実行中はできません。    カーソル・エディットするときは、    エディタが付けた番号と“:”を消さないでください。    これがなくなると    エディタはどのテキストを修正したかがわからなくなり、    コマンド待ちの状態へ戻ります。    [CR]はどこで押してもかまいませんが、    その行の下にテキストがある場合には、    “:”の後にカーソルがなければ、    #を出力してカーソルが点滅し、入力待ちになります。    このエディタは#がないとコマンドを受け付けられません。 ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇   F0RTRAN−MZBの文法 ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇ 1)プログラムの構成   ソース・プログラムは図1のような構成になります。   宣言文は省略可能です。   END文はプログラムの最後に必要です。   コンパイラはこれをみて、コンパイルを終了します。   各々の文は1行(1行は80字以内)に書かれ、継続はできません。   文の1桁目に空白以外の文字があると、その文は注釈文になります。   文番号は必要な文にだけ、1〜65,535の   任意の数を割り当てるだけで良く、   BASICのようにすべての文に順に割り当てる必要はありません。   図1 ソース・プログラムの構成      ・―――――――・      | 宣 言 文 |      |―――――――|      | 実 行 文 |      | 実 行 文 |      |   :   |      |   :   |      |   :   |      |―――――――|      | 実 行 文 |      |―――――――|      | END 文 |      ・―――――――・ 2)主プログラムと副プログラム   主プログラみと副プログラム(サブルーチン)はプログラム単位として   区別されるのではなく、両者は1つのプログラムの中にあります。   変数名は両者で共用されます。 3)文の要素 (1)定数    a)整数型定数      -32,767〜+32,797 10進数、    あるいは$0000〜$FFFFの16進数     【例】 123,-65,$0F,$A12    b)実数型定数      1.67×10^-19〜1.67×10^18の任意の数で有効桁数は7桁     【例】1.0,-1.23,1.5E+12,-0.2E-5    c)文字型定数      その文字のASCIIコードが数値になる。     【例】#A,#B    d)π πは3.14159と書くのと同じことを意味する。 (2)変数    変数名には1〜4文字の一連の英数字を使います。    最初の文字は必ず英字であることが必要です。    変数名の最初の文字がI、J、K、L、M、Nのいずれかである場合は    整数型の変数名、それ以外の英字である場合は    実数型の変数名として区別されます。    予約語は変数名として使われません。 (3)配列    配列はDIMENSION文で宣言します。    配列名の付け方は変数の場合と同じで、    やはり整数型と実数型に区別されます。   【例】DIMENSION A(M)  ただし、1≦M≦2,047      DIMENSION K(M,N) ただし、1≦M≦255                    1≦N≦255                   1≦(M×N)≦2,047   (4)配列の添字    添字は、整定数、整変数、整数型算術式のいずれでもかまいません。 4)算術式   算術演算子には、    1)^  (ベキ乗)    2)*、/(乗算、除算)    3)+、−(加算、減算)   の5種類があります。   1)、2)、3)の順に優先度が高く、   1つの算術式の中に多種類が使われた場合には、   優先度の高いものから順に実行され、   同一順位の演算子は左から右に実行されます。   ベキ乗にはJ^I、A^I、A^Bの3種類の型があります。    ・――――――――――――――――――――――――――――・    |J^I型|J、Iともに整数型で、結果も整数型です。   |    |    |I≧0です。I=0のとき、結果は1です。   |    |――――+―――――――――――――――――――――――|    |A^I型|Aは実数型、Iは整数型(Iは必ず整数型変数で、|    |    |“2”、“3”のような数を使うと次のA↑B型 |    |    |になる)で結果は実数型です。         |    |    |−128≦I≦127に制限されます。        |    |――――+―――――――――――――――――――――――|    |A^B型|A、Bともに実数型で、結果も実数型です。   |    |    |ただし、A>0。               |    ・――――――――――――――――――――――――――――・   A^I形はAをI回加算する方法、   A^B型は自然対数を使って計算する方法がとられるので、   通常はA^I型の方が格段に速く計算できます。   上にも書きましたが、A^Iで計算を行ないたいときは、   必ずIに整変数を使わなければなりません。 5)代入文   一般形は、   ・――――――――――――――――――――・   | v=al               |   ・――――――――――――――――――――・   で、右辺での演算結果を左辺の変数に代入します。   左辺のvは変数、配列、メモリ関数、I/O関数のいずれかです。   変数名および配列名が整数形の場合には右辺の演算は整数型演算、   実数型の場合には右辺は実数型演算として処理されます。 6)制御文  (1)GOTO文   ・――――――――――――――――――――・   | GOTO x                |   ・――――――――――――――――――――・     xは文番号。  (2)IF文     一般形は次のとおりです。   ・――――――――――――――――――――・   | IF(al)x,y,z              |   ・――――――――――――――――――――・     (  )の中に書かれた算術式alの演算結果の     負、零、正に基づいて、     それぞれ、文番号x,y,zにジャンプします。     算術式は“(”の直後の文字が、     A,B,……,H,0,P,……,Zの場合だけ     実数型演算として処理され、     それ以外の場合には整数型演算とみなされます。     また、(  )の中に論理関数が使われた場合は整数型演算と同じです。     x,y,zのいずれも省略可能です。     省略された場合には次の文にジャンプします。  (3)DO文     一般形は、   ・――――――――――――――――――――・   | DO x v=n,m,l             |   ・――――――――――――――――――――・    xはループの端末文の文番号、    vは整変数です。    nは開始値、mはループの終了値、    lは増分のパラメータです。    l、m、nは整定数、整変数、整数型算術式が可能です。    lか1の場合は省略できます。    l≧1、m≧n≧1     a)DO文は6重までネスティングが可能です。     b)DO文の範囲から外へ飛び出せるが、外からは飛び込めません。  (4)CONTINUE文     この文はプログラム中、どこにあっても何も実行しませんが、     DOの端末文、GOTO、IFなどの飛び先としても使えます。  (5)CALL文     この文は指定文番号を、副プログラムの先頭とみなしてコールします。     変数は主プログラムと共用します。  (6)RETURN文     CALL文で呼ばれた副プログラムの最後に書き、     この文が実行されるとCALL文の次の文へ戻ります。  (7)PAUSE文     この文を実行するとプログブムはそこで一時停止します。     この状態でキーを押すと、次の文から実行を再開します。   ・――――――――――――――――――――・   | 例  PAUSE n             |   ・――――――――――――――――――――・     nはプログラマーが任意に付ける数字です。     この文が実行されると『PAUSE n』 が出力され、     一時停止します。     nはどこのPAUSE文 かを知らせるための番号であるため、     任意に付けてかまいません。     必要なければnは省略可能です。     また、停止した状態では、[BREAK]キー が受け付けられます。  (8)STOP文     この文はプログラムの実行を停止させるときに使います。     STOP文はプログラム中どこに入れてもかまいません。   ・――――――――――――――――――――・   | 例  STOP n             |   ・――――――――――――――――――――・     nの関係はPAUSE文 と同じです。  (9)BREAK文     [BREAK]キー のチェックのための文です。     [BREAK]キー が押されなければ、何も実行しません。     この文は端末文としても使用可能である。  (10)USR文     この文はマシン語とリンクするときに使用します。   ・――――――――――――――――――――・   | 例 USR(exp)             |   ・――――――――――――――――――――・     exp で指定されるアドレスをサブルーチン・コールします。     各レジスタ(AF、BC、DE、HL)はプログラム中で決めることができ、     RETURNしたときのレジスタヘの受け渡しは     メモリを介して行なうので、MEM関数 によってセットします。     各レジスタのアドレスは以下の通り。   ・――――――――――――――――――――・   |  AF→12F0              |   |  BC→12F2              |   |  DE→12F4              |   |  HL→12F6              |   ・――――――――――――――――――――・     ただし、AF’、BC’、DE’、HL’、IX、IY、SPを     変えることはできません。  (11)END行     この行はソースの終わりを示すのでコンパイラはこの行を見つけると     コンパイルを停止します。     この文には文番号を付けることができません。 7)入出力文  (1)SETG、RESG文     320×200の疑似グラフィックのセット、リセット文です。   ・――――――――――――――――――――・   | 例 SETG(exp1,exp2)          |   |   RESG(exp1,exp2)          |   ・――――――――――――――――――――・     exp1,exp2で指定される位置にオペレートします。     exp1は横方向で0〜319まで、     exp2は0〜199までの範囲です。     exp1〜 2は定数、変数、式です。  (2)CHM     VRAM(キャラクタRAM)をクリアします。  (3)GRCLR     G−RAM1(グラフィックRAM1)をクリアします。  (4)GRON     G−RAM1をCRTに出力します。  (5)GROFF     G−RAM1のCRT出力をやめます。  (6)READ     一般形は、   ・―――――――――――――――――――――――――・   | READ(v1.fmt,v2.fmt………)            |   ・―――――――――――――――――――――――――・     でvは変数名、配列要素で、 fmtはその形式を表わします。      fmtには次のようなものがあります。      ・―――――――――――――――――――・      | v.     | 10進整数入力    |      | v. I    | 10進 〃      |      | v. B    | 16進 〃      |      | v. E    | 10進実数入力    |      | v. A1    |   1文字入力   |      | v. A2    |   2文字入力   |      | "Strings"  | " "の中を出力   |      |       | 改行        |      ・―――――――――――――――――――・     10進整数入力のときは“I”が省略できます。     vは実数型変数名です。     実数型入力のときは、E型式、F型式のどちらでもかまいません。     ここで、E型式というのは、      1.0E+2、 -2.30E-3     のように“E”を使って表わす数、     F型式というのは、      1.0、-2.3、 0.123     のように“E”を使わないで表わす数の表現型式のことです。  (7)WRITE     一般型は、   ・―――――――――――――――――――――――――――――・   | WRITE(exp1.fmt,exp2.fmt……)              |   ・―――――――――――――――――――――――――――――・     で、 expは定数、変数名、式などです。      ・――――――――――――――――――――・      |exp |10進左詰め整数表示      |      |exp.In |n桁の10進右詰め整数表示   |      |exp.E |E型式による実数表示     |      |exp.B2 |16進2桁表示         |      |exp.B4 |16進4桁表示         |      |exp.X | expだけスペース表示     |      |exp.A1 |1文字出力          |      |exp.A2 |2文字出力          |      |exp.V |カーソル・バーチカル・セット |      |exp.H |カーソル・ホリゾンタル・セット|      |"strings"|文字列出力          |      |/ |改行             |      ・――――――――――――――――――――・      expは定数、変数、式などです。     なお、0.A1でCRTをセット、        1.A1でプリンタをセット     することができます。     各要素は『,』で区切ることができるが、     /(改行)だけは区切る必要がありません。 8)組み込み関数   組み込み関数は以下のとおりです。   ・―――――――――――――――――――――――――――――――――――・   |1)MEM(exp)        12)COS(fxp)       |   |2)GET             13)TAN(fxp)       |   |3)IOC(exp)        14)EXP(fxp)       |   |4)LOW(exp)        15)ALOG(fxp)      |   |5)MOD(exp1,exp2)  16)ATAN(fxp)      |   |6)IRND(exp)       17)FLOAT(fxp)     |   |7)IABS(exp)       18)IFIX(fxp)      |   |8)ISIGN(exp1,exp2)19)IOR(exp1,exp2) |   |9)ABS(fxp)        20)IAND(exp1,exp2)|   |10)SQRT(fxp)       21)IXOR(exp1,exp2)|   |11)SIN(fxp)                         |   ・―――――――――――――――――――――――――――――――――――・   expは整数型の定数、変数、算術式を、   fxpは実数型のそれらを表わしています。 (1)MEM    MEM関数はexpで指定されたメモリをアクセスします。   ・――――――――――――――――――――・   | v=MEM(exp)              |   | MEM(exp)=exp1             |   ・――――――――――――――――――――・    MEM を右辺に置くか左辺に置くかによって機能が変わります。    前者はPEEK的、後者はPOKE的機能を持ちます。    POKE機能の場合、exp1は0〜 255まで使用でき、    それを越える場合には上位8ビットは無視されます。 (2)GET    キーからリアルタイム入力を行ないます。    GET実行中、キー入力があれば対応するASCIIコードの値を持ちます。    入力がなければ0を返します。   ・――――――――――――――――――――・   |例 v=GET                |   |  v=GET+exp              |   ・――――――――――――――――――――・ (3)IOC    I/Oポートをアクセスします。   ・――――――――――――――――――――・   | v=IOC(exp)              |   | IOC(exp)=exp1             |   ・――――――――――――――――――――・    使用方法は MEMと同じです。 (4)LOW   ・――――――――――――――――――――・   |例 LOW(exp)              |   ・――――――――――――――――――――・    exp の下位バイトを取った値を持ちます。    exp は−32,767〜32,767までで、    この関数が持つのは0〜 255までです。 (5)MOD     MODは除算時の余りを与えます。   ・――――――――――――――――――――・   |例 MOD(exp,exp1)            |   ・――――――――――――――――――――・    余りはexp/exp1のそれです。 (6)IRND    この関数は乱数を与えます。   ・――――――――――――――――――――・   |例 IRND(exp)              |   ・――――――――――――――――――――・    乱数は0〜 exp-1までの数です。    exp の上限は32,767までです。 (7)IABS   ・――――――――――――――――――――・   |例 IABS(exp)              |   ・――――――――――――――――――――・    この関数は expの絶対値を与えます。 (8)ISIGN   ・――――――――――――――――――――・   |例 ISIGN(exp1,exp2)          |   ・――――――――――――――――――――・    exp1にexp2の持つ符号を与えます。    この関数が持つ値はexp2の符号の付いたexp1である。 (9)絶対値   ・――――――――――――――――――――・   | ABS(fxp)               |   ・――――――――――――――――――――・    fxp は定数型の定数、変数、あるいは算術式(以下、同じ)で、    fxp の絶対値を与えます。 (10)平方根   ・――――――――――――――――――――・   | SQRT(fxp)               |   ・――――――――――――――――――――・    fxp の平方根を与えます。 (11)、(12)、(13)三角関数   ・――――――――――――――――――――・   | SIN(fxp)               |   | COS(fxp)               |   | TAN(fxp)               |   ・――――――――――――――――――――・    fxp の単位はラジアンで、それぞれ正弦,余弦、正接の値を    与えます( 180°=πラジアン)。 (14)指数関数   ・――――――――――――――――――――・   | EXP(fxp)               |   ・――――――――――――――――――――・    指数関数値ε^(fxp)を与えます。 (15)自然対数   ・――――――――――――――――――――・   | ALOG(μp)               |   ・――――――――――――――――――――・    自然対数 logε^(fxp)を与えます。 (16)逆正接   ・――――――――――――――――――――・   | ATAN(μp)               |   ・――――――――――――――――――――・    逆正接 tan^-1(fxp)を与えます。 (17)実数変換   ・――――――――――――――――――――・   | FLOAT(exp)              |   ・――――――――――――――――――――・    整数型から実数型への変換用関数で、整数exp の実数値を与えます。    【例】FLOAT(1) は 0.100000E+1       FLOAT(-2)は-0.200000E+1 (18)整数変換   ・――――――――――――――――――――・   | IFIX(fxp)               |   ・――――――――――――――――――――・    実数型から整数型への変換用関数で、実数fxp に対して、    その整数値を与えます。    【例】IFIX(1.2345)は1       IFIX(-1.23E+1)は-12 (19)IOR   ・――――――――――――――――――――・   | IOR(exp1,exp2)            |   ・――――――――――――――――――――・    exp1とexp2との対応する各ビットごとにORを取った値を与えます。    【例】IOR($0F,$F0)は$FF       IOR($1F,$01)は$1F (20)IAND   ・――――――――――――――――――――・   | IAND(exp1,exp2)            |   ・――――――――――――――――――――・    exp1とexp2との対応する各ビットごとにANDを取った値を与えます。    【例】IAND($0F,$F0)は$00       IAND($1F,$01)は$01 (21)IXOR   ・――――――――――――――――――――・   | IXOR(exp1,exp2)            |   ・――――――――――――――――――――・    exp1とexp2との対応する各ビットごとにXORを取った値を与えます。    なお、NOTはexp1かexp2のどちらかを$FFにすると得られます。    【例】IXOR($0F,$F0)は$FF       IXOR($1F,$01)は$1E       IXOR($1F,$FF)は$E0 以上がFORTRAN−MZBの持つ関数であり算術式の中で自由に使えます。 式においては、*、/が+、−より先に演算され、 ( )が付いているときのみそれが優先されます。 ( )は6重まで許されます。 ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇      エラーメッセージ ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇ コンパイラは次のようなエラーコードを表示します。 ・――――――――――――――――――――・ | ERROR n            | ・――――――――――――――――――――・ nはエラーコードで数字が出力されます。 (1)ERROR2    パラメータ誤り、または配列の添字の誤りがある場合。 (2)ERROR3    文番号の2重定義の場合。 (3)ERROR4    DIMENSION文 の出てくるところがおかしいとき。 (4)ERROR5    文法上のエラーの場合。 (5)ERROR6    DOの多重ループが6重以上となっている場合。 (6)ERROR7    変数名がおかしい。    たとえば4文字以上の名前を付けたとき。 (7)ERROR8    DIMENSION内 でのエラー。    宣言時に 2,047以上の添字を付けたとき。 (8)ERR DO LOOP    DOループがおかしいとき。 (9)MEMORY SINE OVER ABORT    メモリ・サイズをオーバーしたとき。 (10)ST NO,NOT FOUND    飛び先番号がない場合。 これらに加えて、実数形演算時でのエラーメッセージとして、 下の4種類が表示されます。 (1)0 ERROR XXXX    計算途中にオーバーフローが起こったとき。    ××××はそれが発生した絶対番地。 (2)U ERROR XXXX    計算途中にアンダーフローが起きたとき。 (3)N ERROR XXXX    計算途中で,負の数が許されない場所に負の数が発生したとき、    たとえば、SQRT(fxp)のfxpが負の値になったとき。 (4)D ERROR XXXX    除算実行時の除数に異常が生じたとき。 ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇       プログラム例 ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇ 1)高速フーリエ変換 FORTRANの使える計算機では、 高速フーリエ変換(FFT)はごく一般的なものになっており、 音声認識、図形処理の強力な武器として広く活用されています。 ここでは、FORTRAN−MZBのサンプル・プログラムとして、 FFTプログラムを紹介します。 ●プログラムの構成 A)行番号0〜28:入力次元、数Nと入力の実数部、虚数部、   XR(I),XI(I) を与えて、   FFTサブルーチンをCALLする、メイン・ルーチンです。 B)行番号29〜38:FFTの結果を表示するサブルーチンです   (CALL1000)。   途中で表示を止めたいときは、任意のキーを押してください。   表示終了後は、任意のキーが押されるまで止まっています。   行番号35〜52:COSのテーブルを作成し、   C(I)に代入するサブルーチンです(CALL5000)。   行番号 53〜134:FFTを実行するサブルーチンです   (CALL5100)。 サブルーチン||5100||では IPS=0のときFFT、 IPS=1 のとき逆FFTを計算します。 整数と実数ではその演算時間に格段の差があるので、 できるだけ実数演算を減らしました。 この例( N=128)では、“FFT WORKING”が表示されてから、 “FFT FINISHED”が表示されるまでに16秒を要します。 メイン・ルーチンPrg.1、Prg.2……を作成しておき 『上述のB)の部分、Prg.1』 、 あるいは、『上述のB)の部分、Prg.2』 の順に カセットからロードすると、色々のメイン・ルーチンから、 FFTサブルーチンをCALLすることができます。 2)リサージュ図形 グラフィック・コマンドを使ってリサージュ図形を描かせる プログラムです。 【】参考文献 1)野沢、竹部、中本:“FORM”、I/O、’80年5月号〜9月号、   1980年5月号〜9月号、工学社 2)秋野 実山:“FORTRAN−MZ”、I/O、’81年1月号